﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Log;
using mepostras.BLL;
using mepostras.BO.Util;
using mepostras.DAL;
using GeneralCode = mepostras.BO.Util.BoConfig.MessageCode.General;

namespace mepostras.BO
{
    public class UserTypeBo : IUserTypeBo
    {
        public bool Insert(UserType userType, out string messageCode)
        {
            messageCode = GeneralCode.ServerError;
            bool result = false;
            try
            {
                // Lấy kết quả trả về
                result = DataRepository.UserTypeProvider.Insert(userType);

                // Dựa vào kết quả trả về mà set mã lỗi
                messageCode = result ? GeneralCode.InsertSuccess : GeneralCode.InsertFail;
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error("Insert", ex);
            }
            return result;
        }

        public bool Update(UserType userType, out string messageCode)
        {
            messageCode = GeneralCode.ServerError;
            bool result = false;
            try
            {
                // Lấy kết quả trả về
                result = DataRepository.UserTypeProvider.Update(userType);

                // Dựa vào kết quả trả về mà set mã lỗi
                messageCode = result ? GeneralCode.UpdateSuccess : GeneralCode.UpdateFail;
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error("Update", ex);
            }
            return result;
        }

        public bool Delete(UserType userType, out string messageCode)
        {
            messageCode = GeneralCode.ServerError;
            bool result = false;
            try
            {
                // Không tìm thấy item
                if (userType == null)
                {
                    messageCode = GeneralCode.NotFoundItem;
                    goto StepResult;
                }

                DataRepository.UserTypeProvider.DeepLoad(userType);
                if (userType.UserAccountCollection.Any())
                {
                    messageCode = BoConfig.MessageCode.UserType.HadUser;
                    goto StepResult;
                }

                // Lấy kết quả trả về
                result = DataRepository.UserTypeProvider.Delete(userType.Id);

                // Dựa vào kết quả trả về mà set mã lỗi
                messageCode = result ? GeneralCode.DeleteSuccess : GeneralCode.DeleteFail;
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error("Delete", ex);
            }

        StepResult:
            return result;
        }

        public bool Delete(int userTypeId, out string messageCode)
        {
            return Delete(DataRepository.UserTypeProvider.GetById(userTypeId), out messageCode);
        }
    }
}
